package com.tlgen.spring.utils;

import com.tlgen.tomcat.SpeedTomcatApplication;

import static com.tlgen.spring.factory.SpeedBeanFactory.createBean;

public class SpeedSpringApplication {

    public static void run(String[] args) {
        Thread tomcatDameonThread = new Thread(() -> {
            while (true) {
                SpeedTomcatApplication.run(args);
            }
        });
        tomcatDameonThread.setDaemon(true);
        tomcatDameonThread.start();

        // 创建 bean 信息
        createBean();

        // 注册退出钩子, 让 main 方法后边的代码执行完成之后执行逻辑
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            // 不用在里边执行 while(true) {}, 不然 cpu 直接 100%, 直接加上这个线程不中断的判断即可让主线程在不被外界中断的情况下, 让主线程保持活跃永不退出
            while (!Thread.currentThread().isInterrupted()) {}
            tomcatDameonThread.stop(); // 如果主线程被外界中断, 那么同时关闭守护线程, 要强行终止
        }));
    }

}
